OpenCV是个什么东西呢?它的全称是Open source Computer Vision Library,开放源代码计算机视觉库,如上图所示我们看到的正是OpenCV的logo,可以看到由鲜明的R、G、B三基色的三个小圆环构成,也就是说,它是一套关于计算机视觉的开放源代码的API函数库。这也就意味着,
(1)不管是科学研究,还是商业应用,都可以利用它来作开发;
(2)所有API函数的源代码都是公开的,你可以看到其内部实现的程序步骤;
(3)你可以修改OpenCV的源代码,编译生成你需要的特定API函数。
在ROSMASTER上的图像处理用到了OpenCV的函数库的某些函数,或者可以说在绝大部分图像处理设计领域都离不开它的存在了,早在许多年前至今在入侵检测、特定目标跟踪、目标检测、人脸检测、人脸识别、人脸跟踪等领域,OpenCV可谓大显身手,而这些,仅仅是其应用的冰山一角。既然我们认识到OpenCV如此的通用,在这章节课程中会给你介绍几种我们我们课程中用到的一些很基础的图像处理函数,也是一些通用的函数,在这里我们先对这些知识大致了解一番后,在后面有颜色识别并追踪、人脸识别并追踪两个实践项目教大家上手,但是OpenCV提供的强大应用功能远不止于此,如果你对Opencv计算机视觉库开发很感兴趣想深入了解的话下面提供了几个网站可供大家参考研究学习:
OpenCV 官方主页:https://www.opencv.org
OpenCV 中文论坛:http://www.opencv.org.cn
OpenCV CSDN 论坛:https://bbs.csdn.net/forums/OpenCV
img = cv2.imread('yahboom.jpg', 0) 第一个参数是图片的路径,第二个参数是如何读取这幅图片。
cv2.IMREAD_UNCHANGED:保持原格式不变,-1;
cv2.IMREAD_GRAYSCALE:以灰度模式读入图片,可以用0表示;
cv2.IMREAD_COLOR:,读入一副彩色图片,可以用1表示;默认值
cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道,可以用2表示。
cv.imshow('frame', frame):打开一个窗口名为frame,并且显示frame帧数据(图像/视频数据)
参数含义:
第一个参数表示创建打开的窗口的名字
第二个参数表示需要显示的图片
运行程序
cd ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/
python3 1_1.py
xxxxxxxxxx
import cv2 as cv
•
if __name__ == '__main__':
img = cv.imread('yahboom.jpg')
while True :
cv.imshow("frame",img)
action = cv.waitKey(10) & 0xFF
if action == ord('q') or action == 113:
break
img.release()
cv.destroyAllWindows()
程序运行之后,效果图:
参数含义:
第一个参数是保存的文件名
第二个参数是保存的图像
运行程序,
xxxxxxxxxx
cd ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/
python3 1_2.py
xxxxxxxxxx
import cv2 as cv
•
if __name__ == '__main__':
img = cv.imread('yahboom.jpg')
cv.imwrite("yahboom_new.jpg",img) #新建文件yahboom_new.jpg,并且把yahboom.jpg写进去
new_img = cv.imread('yahboom_new.jpg') #读取新写入的图片
while True :
cv.imshow("frame",img)
cv.imshow("new_frame",new_img)
action = cv.waitKey(10) & 0xFF
if action == ord('q') or action == 113:
break
img.release()
cv.destroyAllWindows()
程序运行之后,效果图
capture=cv.VideoCapture(0)
参数含义:
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“../test.avi”)
ret,img = frame.read()
返回值含义:
ret:ret是一个bool值,判断是否读回正确的帧
img:每一帧的图像数据
运行程序
xxxxxxxxxx
cd ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/
python3 1_3.py
xxxxxxxxxx
import cv2 as cv
if __name__ == '__main__':
frame = cv.VideoCapture(0)
while frame.isOpened():
ret,img = frame.read()
cv.imshow('frame',img)
action = cv.waitKey(10) & 0xFF
if action == ord('q') or action == 113:
break
frame.release()
cv.destroyAllWindows()
程序运行之后,显示摄像头画面,
首先,我们先要读取图像,然后修改bgr的数值,赋值一个区域为黑色。
运行程序
xxxxxxxxxx
cd ~/yahboomcar_ws/src/yahboomcar_astra/scripts/opencv/
python3 1_4.py
xxxxxxxxxx
import cv2
if __name__ == '__main__':
img = cv2.imread('yahboom.jpg')
(b,g,r) = img[100,100]
print(b,g,r)
i=j=0
for j in range(1,255):
img[i,j] = (0,0,0)
for j in range(1,255):
img[i,j] = (0,0,0)
while True :
cv2.imshow("frame",img)
action = cv2.waitKey(10) & 0xFF
if action == ord('q') or action == 113:
break
img.release()
cv2.destroyAllWindows()
程序运行之后,效果图
红色框部分就是修改的色素值。